package v1

import (
	"ginblog/model"
	"ginblog/utils/errmsg"
	"github.com/gin-gonic/gin"
	"net/http"
	"strconv"
)

// AddCategory 添加分类
// @Summary 添加分类
// @Description 添加分类并返回分类信息
// @Tags Category
// @Accept json
// @Produce json
// @Param category body model.Category true "分类信息"
// @Router /api/v1/category [post]
func AddCategory(c *gin.Context) {
	var data model.Category
	_ = c.ShouldBindJSON(&data)
	code = model.CheckCategory(data.Name)
	if code == errmsg.SUCCSE {
		model.CreateCategory(&data)
	}
	if code == errmsg.ERROR_CATEGORY_USED {
		code = errmsg.ERROR_CATEGORY_USED
	}
	c.JSON(http.StatusOK, gin.H{
		"status":  code,
		"data":    data,
		"message": errmsg.GetErrorMsg(code),
	})

}

// GetCateList 查询分类列表
// @Summary 查询分类列表
// @Description 查询分类列表，支持分页
// @Tags Category
// @Accept json
// @Produce json
// @Param pagesize query int false "每页数量"
// @Param pagenum query int false "页码"
//
// @Router /api/v1/category/list [get]
func GetCateList(c *gin.Context) {
	pageSize, _ := strconv.Atoi(c.Query("pagesize"))
	pageNum, _ := strconv.Atoi(c.Query("pagenum"))
	if pageSize == 0 {
		pageSize = -1
	}
	if pageNum == 0 {
		pageNum = -1
	}
	data, total := model.GetCateList(pageSize, pageNum)
	code = errmsg.SUCCSE
	c.JSON(http.StatusOK, gin.H{
		"status":  code,
		"data":    data,
		"total":   total,
		"message": errmsg.GetErrorMsg(code),
	})
}

// UpdateCategory 编辑分类
// @Summary 编辑分类
// @Description 编辑指定分类信息
// @Tags Category
// @Accept json
// @Produce json
// @Param id path int true "分类ID"
// @Param category body model.Category true "分类信息"
//
// @Router /api/v1/category/{id} [put]
func UpdateCategory(c *gin.Context) {
	var data model.Category
	c.ShouldBindJSON(&data)
	id, _ := strconv.Atoi(c.Param("id"))
	code = model.CheckCategory(data.Name)
	if code == errmsg.SUCCSE {
		model.UpdateCategory(id, &data)
	}
	if code == errmsg.ERROR_CATEGORY_USED {
		c.Abort()
	}
	c.JSON(http.StatusOK, gin.H{
		"status":  code,
		"message": errmsg.GetErrorMsg(code),
	})
}

// DeleteCategory 删除分类
// @Summary 删除分类
// @Description 根据分类ID删除分类
// @Tags Category
// @Accept json
// @Produce json
// @Param id path int true "分类ID"
//
// @Router /api/v1/category/{id} [delete]
func DeleteCategory(c *gin.Context) {
	id, _ := strconv.Atoi(c.Param("id"))
	code = model.DeleteCategory(id)
	c.JSON(http.StatusOK, gin.H{
		"status":  code,
		"message": errmsg.GetErrorMsg(code),
	})
}
